1 # pyCalc
2 # Version 1.1
3
4 # Handle Imports
5 from tkinter import *
6 from tkinter import ttk
7
8 # Define Calculator Class
9
10
11 class Calculator:
12
13 # Track calculator values
14 calc_value = 0.0
15
16 # Track Mathematical operators
17 div_trigger = False
18 mult_trigger = False
19 add_trigger = False
20 sub_trigger = False
21
22 # Function - Add up numbers in Entry
23 def button_press(self, value):
24 entry_val = self.number_entry.get()
25 if value != "AC":
26 entry_val += value
27 self.number_entry.delete(0, "end")
28 self.number_entry.insert(0, entry_val)
29 else:
30 entry_val = ""
31 self.number_entry.delete(0, "end")
32 self.number_entry.insert(0, entry_val)
33
34 # Function - Check if value is a float
35 def isfloat(self, str_val):
36 try:
37 float(str_val)
38 return True
39 except ValueError:
40 return False
41
42 # Function - Perform mathematical operations
43 def math_button_press(self, value):
44 if self.isfloat(str(self.number_entry.get())):
45 self.div_trigger = False
46 self.mult_trigger = False
47 self.add_trigger = False
48 self.sub_trigger = False
49
50 self.calc_value = float(self.entry_value.get())
51 if value == "/":
52 self.div_trigger = True
53 elif value == "*":
54 self.mult_trigger = True
55 elif value == "+":
56 self.add_trigger = True
57 else:
58 self.sub_trigger = True
59
60 self.number_entry.delete(0, "end")
61
62 # Function - Display results to Entry
63 def equal_button_press(self):
64 if self.div_trigger or self.mult_trigger or self.add_trigger or self.sub_trigger:
65 if self.add_trigger:
66 solution = self.calc_value + float(self.entry_value.get())
67 elif self.sub_trigger:
68 solution = self.calc_value - float(self.entry_value.get())
69 elif self.mult_trigger:
70 solution = self.calc_value * float(self.entry_value.get())
71 else:
72 solution = self.calc_value / float(self.entry_value.get())
73 self.number_entry.delete(0, "end")
74 self.number_entry.insert(0, solution)
75
76 # Create Tkinter Interface
77 def __init__(self, root):
78 self.entry_value = StringVar(root, value="")
79 root.title('pyCalc')
80 root.geometry("580x330")
81 root.resizable(width=False, height=False)
82
83 # Tkinter Styling
84 style = ttk.Style()
85 style.configure("TButton", font="Serif 15", padding=10)
86 style.configure("TEntry", font="Serif 18", padding=10)
87
88 # Setup GUI
89 self.number_entry = ttk.Entry(
90 root, textvariable=self.entry_value, width=50)
91 self.number_entry.grid(row=0, columnspan=4)
92
93 # Buttons - Row 1
94 self.button7 = ttk.Button(root, text="7",
95 command=lambda: self.button_press("7")).grid(row=1, column=0)
96
97 self.button8 = ttk.Button(root, text="8",
98 command=lambda: self.button_press("8")).grid(row=1, column=1)
99
100 self.button9 = ttk.Button(root, text="9",
101 command=lambda: self.button_press("9")).grid(row=1, column=2)
102
103 self.button_division = ttk.Button(root, text="/",
104 command=lambda: self.math_button_press("/")).grid(row=1, column=3)
105
106 # Buttons - Row 2
107 self.button4 = ttk.Button(root, text="4",
108 command=lambda: self.button_press("4")).grid(row=2, column=0)
109
110 self.button5 = ttk.Button(root, text="5",
111 command=lambda: self.button_press("5")).grid(row=2, column=1)
112
113 self.button6 = ttk.Button(root, text="6",
114 command=lambda: self.button_press("6")).grid(row=2, column=2)
115
116 self.button_multiply = ttk.Button(root, text="*",
117 command=lambda: self.math_button_press("*")).grid(row=2, column=3)
118
119 # Buttons - Row 3
120 self.button1 = ttk.Button(root, text="1",
121 command=lambda: self.button_press("1")).grid(row=3, column=0)
122
123 self.button2 = ttk.Button(root, text="2",
124 command=lambda: self.button_press("2")).grid(row=3, column=1)
125
126 self.button3 = ttk.Button(root, text="3",
127 command=lambda: self.button_press("3")).grid(row=3, column=2)
128
129 self.button_add = ttk.Button(root, text="+",
130 command=lambda: self.math_button_press("+")).grid(row=3, column=3)
131
132 # Buttons - Row 4
133 self.button_clear = ttk.Button(root, text="AC",
134 command=lambda: self.button_press("AC")).grid(row=4, column=0)
135
136 self.button0 = ttk.Button(root, text="0",
137 command=lambda: self.button_press("0")).grid(row=4, column=1)
138
139 self.button_equal = ttk.Button(root, text="=",
140 command=lambda: self.equal_button_press()).grid(row=4, column=2)
141
142 self.button_sub = ttk.Button(root, text="-",
143 command=lambda: self.math_button_press("-")).grid(row=4, column=3)
144
145
146 # Run application
147 root = Tk()
148 calc = Calculator(root)
149 root.mainloop()